【补丁使用】
该补丁将修改同目录下的Sango2.exe。请将补丁放在Sango2.exe同一目录下，并运行补丁。
大多数情况下，请直接输入N跳过高级选项。
修改有风险，请注意备份。
目前，所有带文字提示的补丁，均以 英文 / GBK简体 / Big5繁体 的格式进行说明。

注：如果您是MOD制作者，请根据自己的需要调整大地图存档中储存当前时间的位置偏移。默认为0x30，但如果您目前的存档格式已经占用了此处，您也可以手动指定其它的偏移量。目前受指令长度限制，暂时只支持<0x7F的偏移量，因此该偏移只能处于文件头。


【作用说明】
使用后，将会把大地图上的【设定选项】替换为【保存进度】，此时的存档被称为【大地图存档】。
使用后将无法在大地图上调整音乐和音效音量，必须退回主选单进行调整。

保存的大地图存档在使用同一EXE读取时：
（1）会进入内政，但所有的内政自治、搜索、开发选项保持上一次过年内政结束时的情形，因此如果已经进行过自治则无法再自治，已经搜索/开发过的武将无法再次搜索/开发；不过，可以使用物品；此时如果进行保存，得到的存档仍然为大地图存档；
（2）结束内政进入大地图时，将恢复到保存时的大地图时间。

保存的大地图存档在使用不同EXE读取时：
（3）如果EXE与原存档EXE使用相同的时间位置偏移量（默认为0x30），则结果和使用同一EXE时相同；
（4）如果不同，或者EXE不具备大地图存档功能，则内政自治、搜索、开发选项仍然和（1）中相同，但进入大地图时，时间将还原为年初。

在默认偏移量0x30下，使用本补丁修改的EXE，原则上与@一马双跨到西凉 的EXE兼容，可以互相读取大地图存档。


【说明】
修改原理基本照抄了@一马双跨到西凉 的框架，不过，改成了原地修改。
首先，需要将“设定选项”改成“保存进度”。修改两处：一处在48A0EC处，直接把文字修改为“保 存 進 度”；另一处在41F488位置，把g_MusicOption（489B38）改成g_MainSave（48AED8），调整单击按钮时的行为。
其次，需要修改存档和读档时的行为。存档时，总是将4C30E0（g_nGlobalClock）处的值（大地图时间）存到存档指定偏移位置，读档时总是从存档中读取大地图时间。
	43207C      WriteSaveFile:
	00432166         |.  8B0D 68D24B00              mov ecx,dword ptr [4BD268]
	0043216C         |.  8941 54                    mov dword ptr [ecx+54],eax
	0043216F         |.  8B15 E0304C00              mov edx,dword ptr [4C30E0]
	00432175         |.  A1 90D34B00                mov eax,dword ptr [4BD390]
	0043217A         |.  8941 58                    mov dword ptr [ecx+58],eax
	0043217D         |.  8951 30                    mov dword ptr [ecx+30],edx
	00432180         |.  90                         nop
	00432181         |.  90                         nop
	00432182         |.  90                         nop


	433A39    ReadSaveFile:
	00433AA6         |.  0FBF48 5C                  movsx ecx,word ptr [eax+5C]
	00433AAA         |.  890D BC644A00              mov dword ptr [4A64BC],ecx
	00433AB0         |.  8B48 30                    mov ecx,dword ptr [eax+30]
	00433AB3         |.  890D E0304C00              mov dword ptr [4C30E0],ecx
	00433AB9         |.  90                         nop
	00433ABA         |.  90                         nop
	00433ABB         |.  0FBF50 5E                  movsx edx,word ptr [eax+5E]

这样修改之后，读档内政时大地图时间是被读入到内存中的。然而，三国2内政的逻辑是，内政时大地图时间为0，结束内政时复原为3600（年初）。因此，需要在结束内政的代码中，判断大地图时间是否为0，不为零则跳过复原大地图时间的操作。
目标函数41BBF5（注册未命名，但可以用Ollydbg跟踪到）。西凉在这里是跳到了文件末尾的空白位置。不过研究之后发现，这个函数的主体循环内部不包括任何函数调用，因此可以使用寄存器代替局部变量作为循环变量，省下一堆空间。这样就可以实现原地修改了，空间绰绰有余。
	0041BBF5         /$  55                         push ebp
	0041BBF6         |.  8BEC                       mov ebp,esp
	0041BBF8             833D E0304C00 00           cmp dword ptr [4C30E0],0                       ; ; 检查g_nGlobalClock是否为0
	0041BBFF             75 28                      jne short 0041BC29                             ; ; 不为零说明为大地图存档，直接跳到函数尾
	0041BC01             E8 BAD8FEFF                call 004094C0                                  ; ; 改写原函数，直接用eax代替[ebp-4]精简循环
	0041BC06             85C0                       test eax,eax
	0041BC08             74 15                      je short 0041BC1F
	0041BC0A             C740 2C 00000000           mov dword ptr [eax+2C],0
	0041BC11             8B80 46030000              mov eax,dword ptr [eax+346]
	0041BC17             90                         nop
	0041BC18             90                         nop
	0041BC19             90                         nop
	0041BC1A             90                         nop
	0041BC1B             90                         nop
	0041BC1C             90                         nop
	0041BC1D           ^ EB E7                      jmp short 0041BC06                             ; ; 循环结束
	0041BC1F         |>  C705 E0304C00 100E0000     mov dword ptr [4C30E0],0E10                    ; ; 设置g_nGlobalClock为3600 - 大地图存档时跳过此句
	0041BC29         |.  68 58CD4800                push offset 0048CD58                           ; /Arg1 = Sango2.48CD58
	0041BC2E         |.  E8 18450100                call 0043014B                                  ; \Sango2.0043014B
	0041BC33             90                         nop                                            ; ; 由于不再使用[ebp-4]，函数开头也未预留，取消堆栈调整
	0041BC34             90                         nop
	0041BC35             90                         nop
	0041BC36         |.  8BE5                       mov esp,ebp
	0041BC38         |.  5D                         pop ebp
	0041BC39         \.  C3                         retn

这样修改之后，还有最后一个问题：从菜单新开进程时，不会复原大地图时间。如果从大地图上回主选单，然后开新游戏，此时大地图时间没有被复原，内政结束时就不会从年初开始。
目标函数42C19E（LoadBasicCount），它被PreparePeriod（42E233）函数调用。末尾42C214处长跳，将g_nGlobalClock清零。
原地修改的处理法如下：

	0042C208             BA 80D34B00                mov edx,offset 004BD380                        ; 最后一条函数无需调整堆栈，[ebp-4]也没有用到
	0042C20D             8B0A                       mov ecx,dword ptr [edx]                        ; 故取消相应语句，用edx暂存地址
	0042C20F             894A 10                    mov dword ptr [edx+10],ecx                     ; 这样将[4bd380]赋值给[4bd390]的过程可以省2字节
	0042C212             31C9                       xor ecx,ecx                                    ; 留出空间将ecx清0，0赋值给4C30E0（g_nGlobalClock）
	0042C214             890D E0304C00              mov dword ptr [4C30E0],ecx

这样就完成了。总共修改6处。


【UE快速修改】
如果您因一些原因无法或不愿意使用补丁程序，您也可以使用UltraEdit打开Sango2.EXE，直接按如下方法修改相应地址处的内容。

从: 
1AFF8: 51 E8 C2 D8 FE FF 89 45 FC 83 7D FC 00 74 18 8B 45 FC
1B012: 4D FC 8B 91 46 03 00 00 89 55 FC
1B01E: E2
1B033: 83 C4 04

1E889: 38 9B

2B608: 83 C4 10 89 45 FC 8B 0D 80 D3 4B 00
2B616: 90 D3 4B

31571: 68 D2 4B
3157B: 42
3157D: 8B 0D 68 D2 4B 00

32EA6: 8B 15 68 D2 4B 00 0F BF 42 5C A3 BC 64 4A 00 8B 0D 68 D2 4B 00
32EBD: 51

882EC: B3 5D
882EF: A9 77
882F2: BF EF
882F5: B6 B5


改为: 
1AFF8: 83 3D E0 30 4C 00 00 75 28 E8 BA D8 FE FF 85 C0 74 15
1B012: 80 46 03 00 00 90 90 90 90 90 90
1B01E: E7
1B033: 90 90 90

1E889: D8 AE

2B608: BA 80 D3 4B 00 8B 0A 89 4A 10 31 C9
2B616: E0 30 4C

31571: E0 30 4C
3157B: 41
3157D: 89 51 40 90 90 90

32EA6: 0F BF 48 5C 89 0D BC 64 4A 00 8B 48 40 89 0D E0 30 4C 00 90 90
32EBD: 50

882EC: AB 4F
882EF: A6 73
882F2: B6 69
882F5: AB D7